
// 问：如何进入该程序
// if (a == 1 && a == 2 && a == 3) {
//   console.log('you win!')
// }

// var a = {
//   _default: 0,
//   toString: function() {
//     return ++ this._default;
//   }
// }


// if (a == 1 && a == 2 && a == 3) {
//   console.log('you win!')
// }


// 问题1：如何进入该程序
// if (a === 1 && a === 2 && a === 3) {
//   console.log('you win!')
// }

// 使用 Object.defineProperty

// var _default = 0;

// Object.defineProperty(window, 'a', {
//   get() {
//     console.log("获取值:"+ _default)
//     return ++ _default;
//   },
//   set(newVal) {
//     // console.log('设置值'+ newVal)
//   }
// })

// if (a === 1 && a === 2 && a === 3) {
//   console.log(a); // 4
//   console.log('you win!')
// }

// if (a > 0 && a > 1 && a > 2) {
//   console.log(a); // 4
//   console.log('you win win!')
// }







// 问题2：
// a = 'Object';
// a = 'Array';
// a = 123;

/**
 * {
 *  type: 'Object',
 *  length: 6
 * }
 * {
 *  type: 'Array',
 *  length: 5
 * }
 * 
 * TypeError: This type is invalid
 * 
 */


// var _default = null;

// Object.defineProperty(window, 'a', {
//   get() {
//     return _default;
//   },
//   set(newVal) {
//     // console.log('设置值: '+ newVal);
//     switch (newVal) {
//       case 'Object':
//       case 'Array':
//         _default = {
//           type: newVal,
//           length: newVal.length
//         }
//         break;
//       default:
//         throw new TypeError('This type is invalid')
//     }
//   }
// })


// a = 'Object';
// console.log(a);
// a = 'Array';
// console.log(a);
// a = 123;
// console.log(a);







// 问题3：

// 添加多少个+ 就按个数输出 abcde ... xz 
// console.log(_ + _ + _ + _ + _)


// Object.defineProperty(window, '_', {
//   get() {
//     // 获取 'a' 的编码位置 每次获取后自增供下次访问  编码位置再转字符串
//     this._c = this._c || 'a'.charCodeAt(0);
//     // console.log(this._c);
//     var _ch = String.fromCharCode(this._c);

//     if (this._c >= 'a'.charCodeAt(0) + 26) return;

//     this._c++;

//     return _ch;
//   }
// })

// console.log(_ + _ + _ + _ + _)







// 问题4：

// var obj = {
//   a: 1,
//   b: 2,
//   c: 3
// }

// for(var k in obj) {
//   obj[k] += 1;
// }

// console.log(obj); // {a: 2, b: 3, c: 4}

/**
 * {
 *  a: 3,
 *  b: 3,
 *  c: 5
 * }
 */


var _obj = {
  a: 1,
  b: 2,
  c: 3
}

var obj = {};

for(var k in _obj) {
  Object.defineProperty(obj, k, {
    // get() {
    //   console.log(_obj[k]) // 默认不可枚举
    // }
    // writable: true, // {a: 3, b: 4, c: 5}
    writable: k === 'b' ? false: true,
    enumerable: true,
    // configurable: true,
    value: ++ _obj[k]
  })
}

for(var k in obj) {
  obj[k] += 1;
}

console.log(obj); // {a: 3, b: 3, c: 5}